package br.com.academia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.academia.modelo.Unidade;

public class UnidadeDAO {

	private Connection connection;
	private PreparedStatement stmt;
	private ResultSet rs;
	private String sql;
	private boolean resultado = true;

	public UnidadeDAO() {
		connection = new ConnectionFactory().getConnection();
	}

	public boolean incluir(Unidade unidade) {
		sql = "insert into unidade (nome , local, tamanho, capacidade) "
				+ "values (?,?,?,?)";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, unidade.getNome());
			stmt.setString(2, unidade.getLocal());
			stmt.setInt(3, unidade.getTamanho());
			stmt.setInt(4, unidade.getCapacidade());
			stmt.executeUpdate();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	private void close() {
		try {
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public boolean alterar(Unidade contato) {
		sql = "update unidade set nome=?, local=?, tamanho=?, capacidade=? where idunidade=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getLocal());
			stmt.setInt(3, contato.getTamanho());
			stmt.setInt(4, (int) contato.getCapacidade());
			stmt.setInt(5, contato.getIdunidade());
			stmt.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public boolean excluir(Unidade contato) {
		sql = "delete from unidade where idunidade = ?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, contato.getIdunidade());
			stmt.execute();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public Unidade consultar(Unidade contato) {
		sql = "select nome, local, tamanho, capacidade from unidade where idunidade=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, (int) contato.getIdunidade());
			rs = stmt.executeQuery();
			rs.next();
			contato.setNome(rs.getString("nome"));
			contato.setLocal(rs.getString("local"));
			contato.setTamanho(rs.getInt("tamanho"));
			contato.setCapacidade(rs.getInt("capacidade"));
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return contato;
	}

	public ArrayList<Unidade> listar() {
		ArrayList<Unidade> lista = new ArrayList<>();
		sql = "select * from unidade";
		try {
			stmt = connection.prepareStatement(sql);
			rs = stmt.executeQuery();
			Unidade contato;
			while (rs.next()) {
				contato = new Unidade();
				contato.setIdunidade(rs.getInt("idunidade"));
				contato.setNome(rs.getString("nome"));
				contato.setLocal(rs.getString("local"));
				contato.setTamanho(rs.getInt("tamanho"));
				contato.setCapacidade(rs.getInt("capacidade"));
				lista.add(contato);
			}
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return lista;
	}
}
